import 'package:flutter/material.dart';
import 'package:get/get.dart';

/// 分析服务
/// 负责收集和上报用户行为分析数据
class AnalyticsService extends GetxService {
  // 是否启用分析
  final RxBool _enabled = true.obs;
  bool get enabled => _enabled.value;
  set enabled(bool value) => _enabled.value = value;
  
  // 用户标识符
  String? _userId;
  String? get userId => _userId;
  
  // 会话标识符
  final String _sessionId = DateTime.now().millisecondsSinceEpoch.toString();
  String get sessionId => _sessionId;
  
  @override
  void onInit() {
    super.onInit();
    debugPrint('分析服务已初始化');
  }
  
  /// 设置用户ID
  void setUserId(String? id) {
    _userId = id;
    if (id != null) {
      _logEvent('user_identified', {'user_id': id});
    }
  }
  
  /// 记录页面访问
  void logScreenView(String screenName, {Map<String, dynamic>? parameters}) {
    final eventParams = {
      'screen_name': screenName,
      'session_id': _sessionId,
      ...?parameters,
    };
    
    _logEvent('screen_view', eventParams);
  }
  
  /// 记录用户操作
  void logUserAction(String action, {Map<String, dynamic>? parameters}) {
    final eventParams = {
      'action': action,
      'session_id': _sessionId,
      ...?parameters,
    };
    
    _logEvent('user_action', eventParams);
  }
  
  /// 记录事件
  void logEvent(String eventName, {Map<String, dynamic>? parameters}) {
    _logEvent(eventName, parameters);
  }
  
  /// 记录错误
  void logError(String errorMessage, {Map<String, dynamic>? parameters}) {
    final eventParams = {
      'error_message': errorMessage,
      'session_id': _sessionId,
      ...?parameters,
    };
    
    _logEvent('app_error', eventParams);
  }
  
  /// 内部记录事件方法
  void _logEvent(String name, [Map<String, dynamic>? parameters]) {
    if (!_enabled.value) return;
    
    final eventData = {
      'event_name': name,
      'timestamp': DateTime.now().toIso8601String(),
      'user_id': _userId,
      'session_id': _sessionId,
      ...?parameters,
    };
    
    // 在实际应用中，这里应该将数据发送到分析服务
    // 如Firebase Analytics、AppCenter或自定义服务器
    debugPrint('分析事件: $name, 数据: $eventData');
  }
  
  /// 启用/禁用分析
  void setEnabled(bool value) {
    _enabled.value = value;
    debugPrint('分析服务已${value ? '启用' : '禁用'}');
  }
} 